def outer_func():
    a = 1

    def inner_func():
        nonlocal a
        a += 1
        return a

    return inner_func


print(outer_func()())

'''闭包函数'''

# 满足以下三点才是闭包函数
# 1、结构体必须嵌套函数
# 2、内函数必须使用外函数的变量
# 3、外函数的返回值必须是内函数的名字

'''闭包函数的应用'''


# 函数工厂：这个函数可以根据不同的输入，产生不同的行为
# 比如我有一个函数 jisuan() ，当传入实参是2的时候，这个函数会计算某个数的平方，当传入3时，会计算某个数的立方

def jisuan(n):
    def inner(x):
        return x ** n
    return inner

pingfang = jisuan(2)
lifang = jisuan(3)
sicifang = jisuan(4)

print(pingfang(10))
print(lifang(2))
print(sicifang(6))